package note_002;

import java.io.File;
import java.io.FileFilter;
import java.io.FileOutputStream;

public class day03 {
    public static void main(String[] args) {
        /** java.in.File类
         * 该类的每一个实例用于表示硬盘上的一个文件或目录(实际上表示的是一个抽象路径)
         * 使用File可以:---------------"./" 为当前目录
         *  1:访问其表示的文件或目录的属性(名字,大小等)
         *  2:创建或删除文件和目录
         *  3:访问一个目录的子项信息
         * 但是不能访问文件数据
         */
        /* 1.访问其表示的文件或目录的属性(名字,大小等) */
        /** 实例化File时要指定路径 */
        File file = new File("./demo.txt");
        /** canRead() 可读 */
        /** canWrite() 可写 */
        /** isHidden() 是否隐藏 */

        /* 2.创建或删除文件和目录 */
        //--------------------------------------------------创建
        /** 使用File创建一个文件 */
        //File file = new File("./test.txt");
        /** boolean exists() 文件或目录是否已经真实*/
        //判断当前File表示的文件或目录是否已经真实存在
        /** createNewFile() 创建一个新文件 */
        //---------------------------------------------------删除文件
        /** 在当前目录下删除一个文件test.txt */
        //在相对路径中"./"是可以忽略不写，默认就是当前目录开始
        // File file = new File("./test.txt");
        /** delete() 删除一个文件 */
        //---------------------------------------------------创建目录
        /** 在当前目录下创建一个目录./dome */
//        File dir = new File("./a/b/c/d/e");
        /** mkdir():创建一个目录    mkdirs():创建多级目录 */
//        dir.mkdir()方法在创建目录时要求该目录所在的目录必须存在
//        dir.mkdirs()方法则会将所有不存在的父目录一同创建出来
        //----------------------------------------------------删除一个目录
        /** 将当前目录下demo目录删除 */
//        在当前目录下的demo目录删除
//        File dir = new File("./dome");
        /** delete() 删除一个目录 */
        //删除条件: 目录为空目录.
        //delete()方法在删除目录时要求是:该目录是一个空目录，否则无法删除。

//------------------------------------------------------------------------------访问
        /** 访问一个目录中的所有子项 */
        //访问当前目录(当前项目目录)所有子项
        //File dir = new File(".");
        /**  进行判断:
            boolean isFile()
            判断当前File对象表示的是否为一个文件
            boolean isDirectory()
            判断当前File对象表示的是否为一个目录
         */
        /** listFiles()
                        返回一个抽象路径名数组，
         该数组表示该抽象路径名所表示的目录中满足指定过滤器的文件和目录 */
//        if(dir.isDirectory()){
//            File[]  subs = dir.listFiles();//把filter传入
//                                           //listFiles()
//                                           返回一个抽象路径名数组，
//                                           该数组表示该抽象路径名所表示的目录中满足指定过滤器的文件和目录
////            System.out.println(subs);
////            for(int i=0;i<subs.length;i++){
////                System.out.println(subs[i].getName());//getName()是file有的，当自己创建则需要创建get/set
////            }
////        }
        /** 有条件的获取某个目录下的子项 */
        //将目录中每个子项都经过给定的过滤器accept方法，并保留所有返回为true的子项
        /** FileFilter: 过滤器 */
//        FileFilter filter = new FileFilter() {//FileFilter过滤器，匿名内部类
        //使用匿名内部类创建一个文件过滤器
//            public boolean accept(File file) {
//                String name = file.getName();
//                return name.endsWith(".txt");//通过后缀判断是否获取，true则获取，false则过滤
//            }
//        };

        /** lambda */
//        他可以用更新精简的语法创建匿名内部类
//        需要注意:只有实现的接口中包含一个抽象方法时才可以使用lambda表达式创建匿名内部类.
//        语法:
//        (参数列表)->{
//          方法体
//        }
        /*创建一个文件过滤器，过滤器内容:保留文本文件;
        FileFilter boo = new FileFilter() {
            public boolean accept(File file) {
                return file.getName().startsWith(".");
            }
        };
         */
        //lambda表达式:
//        (参数列表)->{
//          方法体
//        }
        //lambda中参数的类型可以不写:
        //如果方法体中只有一句代码，则方法体的{}可以忽略不写，如果有return也要一同忽略：
        //如果参数列表中只有一个参数，那么()小括号可以不写：
        //FileFilter filter1 = f->f.getName().startsWith(".txt");
        //获取当前目录中所以的文本文件：

        /** IO : JAVA标准的输入与输出 */
        /** java定义了两个超类:java.io.InputStream和OutputStream */
//        InputStream(字节输入流):是所有字节输入流的超类，规定了读取字节的相关操作。所有实际读取字节的
//                流都继承自它
//        OutputStream(字节输出流):是所有字节输出流的超类，用于写出字节。
//        输入与输出的参照方向是我们的程序:
//        输入:从外界到程序的方向，是用来读取数据的
//        输出:从程序到外界的方向，是用来写出数据的
        /*FileOutputStream fos = new FileOutputStream("./fos.dat");*/
        /*()里可以写入字符串""或file:它可以表示一个文件并可以自己创建文件夹*/
        /** write() */
//        void write(int d)
//        向文件中写入1个字节，写入的是给定的int值对应得2进制的"低八位"
//                                   vvvvvvvv
//        00000000 00000000 00000000 00000001
        /** close():结束 */












    }
}
